package org.exez.modules.visitor.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.exez.modules.visitor.dto.ReservationApplicationDTO;
import org.exez.modules.visitor.dto.terminal.VisitorReservationDTO;
import org.exez.modules.visitor.entity.ReservationApplication;
import com.baomidou.mybatisplus.extension.service.IService;
import org.exez.modules.visitor.vo.IndexCountVO;
import org.exez.modules.visitor.vo.ReservationApplicationCountVO;
import org.exez.modules.visitor.vo.ReservationApplicationVO;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Description: 访客申请记录表
 * @Author: exez-boot
 * @Date:   2020-06-04
 * @Version: V1.0
 */
public interface IReservationApplicationService extends IService<ReservationApplication> {



    /**
     * 通过id查询访问信息详情（包含随从人员）
     * @param id
     * @return
     */
    ReservationApplicationDTO getDetailsById(Integer id);

    /**
     * 分页查询拜访记录
     * @param page
     * @return
     */
    ReservationApplicationCountVO listApplication(Page<ReservationApplication> page, LambdaQueryWrapper<ReservationApplication> queryWrapper,
                                                  Integer applicationStatus,Integer timeType);


    /**
     * 即将到访信息
     * @return
     */
    List<ReservationApplicationVO> listApplicationByComingSoon(Integer size);

    /**
     * 实时到访信息
     * @return
     */
    List<ReservationApplicationVO> listApplicationByRealTime(Integer size);

    /**
     * 首页统计
     * @return
     */
    IndexCountVO indexCount();

    /**
     * 数据分析来访人员已到未到柱形图
     * @param type 统计类型：1周 2月 3年
     * @return
     */
    List<Map<String,String>> indexVisitorAnalysis(Integer type,Integer institutionId);

    /**
     * 首页来访人员已到未到柱形图
     * @return
     */
    List<Map<String,String>> indexVisitorAnalysisByDay(Integer institutionId);


    /**
     * 外侧数据传输
     * @param reservationApplicationDTOs
     */
    void dataTransmission(List<ReservationApplicationDTO> reservationApplicationDTOs);


    /**
     * 外侧数据传输
     */
    void dataTransmission();


    /**
     * 从设备采集访客登记
     * @param visitorReservationDTO
     * @return
     */
    String saveReservationByDevice(VisitorReservationDTO visitorReservationDTO);

    /**
     * 根据openId查询上一次预约记录
     * @param openId
     * @return
     */
    ReservationApplicationVO getNewApplicationByOpenId(String openId);

    /**
     * 根据openId查询上一次预约记录
     * @param openId
     * @return
     */
    ReservationApplicationVO getApplicationByPushStatus(String openId);

    /**
     * 访客到达修改状态
     * @param identityValue 身份证号码
     * @param date 进入时间
     * @return
     */
    void updateByArrivals(String identityValue,Date date);


}
